//#include<iostream>
//using namespace std;
//int ans=0;
//void fun(int value){
//	if(value==0){
//		ans++;
//		return ;
//		}
//	if(value>=2)
//		fun(value-2);
//	fun(value-1);
//}
//
//int main(){
//	int q;
//	cin>>q;
//	fun(q);
//	cout<<ans;
//}


//#include<iostream>
//using namespace std;
//long long int ans[10000];
//int len;
//long long int fun(int value){
//	if(value<=len)
//		return ans[value];
//	ans[value]=fun(value-1)+fun(value-2);
//	len++;
//	return ans[value];
//	
//}
//int main(){
//	ans[1]=1;
//	ans[2]=2;
//	len=2;
//	int q;
//	cin>>q;
//	fun(q);
//	cout<<ans[q];
//}


#include<iostream>
using namespace std;
typedef struct {
	char v[100];
	int len;
}value;

value pluss(value a,value b){
	value ans;
	bool flag=false;
	int i=0;
	for(;i<a.len||i<b.len;i++){
		if(i<a.len&&i<b.len){
			ans.v[i]=a.v[i]+b.v[i]+flag-'0';
			flag=(a.v[i]+flag+b.v[i]-'0'-'0')/10;
		}
		else if(i<b.len){
			ans.v[i]=b.v[i]+flag;
			flag=(b.v[i]+flag-'0')/10;
		}
		else if(i<a.len){
			ans.v[i]=a.v[i]+flag;
			flag=(a.v[i]+flag-'0')/10;
			}
	}
	if(flag){
		ans.v[i]=flag+'0';
		i++;
	}
	ans.len=i;
	cout<<i<<endl;
	return ans;
}

value an[5001];
int n;
value fun(int a){
	if(a<=n)
		return an[a];
	an[a]=pluss(fun(a-1),fun(a-2));
	n++;
	return an[a];
}


int main(){
	an[1].len=1;
	an[1].v[0]=1;
	an[2].len=1;
	an[2].v[0]=2;
	n=2;
	int q;
	cin>>q;
	if(q==0){
	cout<<0;
	return 0;}
	value anss=fun(q);
	cout<<anss.len<<endl<<endl; 
	for(int i=anss.len-1;i>=0;i--){
		cout<<anss.v[i];
	}
	cout<<"ok0"<<endl; 
}




//#include<iostream>
//using namespace std;
//long long int ans[10000];
//int len;
//long long int fun(int i){
//	if(i<=len){
//		return ans[i];
//	}
//	ans[i]=fun(i-1)+fun(i-2);
//	len++;
//	return ans[i];
//}
//int main(){
//	int q;
//	cin>>q;
//	ans[1]=1;
//	ans[2]=2;
//	len=2;
//	fun(q);
//	cout<<ans[q];
//}
